package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.annotation.CacheFind;
import com.jt.mapper.ItemCatMapper;
import com.jt.pojo.ItemCat;
import com.jt.util.ObjectMapperUtil;
import com.jt.vo.EasyUITree;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import redis.clients.jedis.Jedis;
import java.util.ArrayList;
import java.util.List;

@Service    //容器 生命周期较长的一个大型的map集合<itemCatServiceImpl,itemCatServiceImpl的对象>
public class ItemCatServiceImpl implements ItemCatService{

    @Autowired
    private ItemCatMapper itemCatMapper;
    @Autowired(required = false)
    private Jedis jedis;    //该参数不是最终结构,后期需要优化 该参数不是必须的

    @Override
    public ItemCat selectById(Integer id) {
        return itemCatMapper.selectById(id);
    }

    /**
     * 根据parentID查询商品分类列表信息
     * 2.将商品分类妆花为list<vo>对象
     * 3.返回vo的list集合
     * @param parentId
     * @return
     */
    @Override
    @CacheFind(key="ITEM_CAT_PARENTID")
    public List<EasyUITree> findItemCatList(Long parentId) {
        //1.根据父级id查询子级的信息
        QueryWrapper<ItemCat> QueryWrapper = new QueryWrapper<>();
        QueryWrapper.eq("parent_id",parentId);
        List<ItemCat> itemCatList = itemCatMapper.selectList(QueryWrapper);

        //2.将itemCat对象 转化为VO对象
        ArrayList<EasyUITree> voList = new ArrayList<>();
        for (ItemCat itemCat:itemCatList){
            Long id = itemCat.getId();
            String text = itemCat.getName();
            //如果是父级则闭合,否则打开
            String state = itemCat.getIsParent() ? "closed" : "open";
            EasyUITree easyUITree = new EasyUITree(id, text, state);
            voList.add(easyUITree);
        }
        return voList;
    }

    /**
     * 先查缓存，没有的情况下再查数据库
     * @param parentId
     * @return
     */
    @Override
    public List<EasyUITree> findItemCatCache(Long parentId) {
        List<EasyUITree> list = new ArrayList<>();
        Jedis jedis = new Jedis();
        String key="Item_Cat_PARENT::"+parentId;
        if (jedis.exists(key)){
            String s = jedis.get(key);
            list=ObjectMapperUtil.toObject(s,list.getClass());
        }else {
            list=findItemCatList(parentId);
            String json = (String) ObjectMapperUtil.toJSON(list);
            jedis.set(key,json);
            System.out.println();
        }
        return list;
    }
}
